/* 
 * Contato.java
 * 
 * Data de criação: 05/09/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;
import br.com.o2solutions.siso.integration.entidade.enumerator.TipoContatoEnumerator;

/**
 * Classe responsável por representar a forma de contato com uma pessoa o
 * unidade operacional podendo ser:
 * <ul>
 * <li>Email</li>
 * <li>Celular</li>
 * <li>BIP</li>
 * <li>Telefone de Recado</li>
 * <li>Telefone</li>
 * </ul>
 * 
 * @author Osvaldeir
 * @since 05/09/2010
 * 
 */
@Entity
@Table(name = "TBCONTATO", uniqueConstraints = @UniqueConstraint(columnNames = "VALOR"))
@SequenceGenerator(name = "SQCONTATO", sequenceName = "SQCONTATO")
public class Contato extends BaseEntity<Long> {

	private static final long serialVersionUID = 1L;

	private TipoContatoEnumerator tipoContato;

	private String valor;

	@Id
	@Override
	@Column(name = "CONTATOID")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQCONTATO")
	public Long getId() {
		return super.getId();
	}

	/**
	 * Retorna o(a) tipoContato.
	 * 
	 * @return TipoContatoEnumerator
	 */
	@Enumerated(EnumType.STRING)
	@Column(name = "TIPOCONTATO", nullable = false)
	public TipoContatoEnumerator getTipoContato() {
		return tipoContato;
	}

	/**
	 * Atribui o(a) tipoContato.
	 * 
	 * @param tipoContato
	 *            TipoContatoEnumerator
	 */
	public void setTipoContato(TipoContatoEnumerator tipoContato) {
		this.tipoContato = tipoContato;
	}

	/**
	 * Retorna o(a) valor.
	 * 
	 * @return String
	 */
	@Column(name = "VALOR", nullable = false)
	public String getValor() {
		return valor;
	}

	/**
	 * Atribui o(a) valor.
	 * 
	 * @param valor
	 *            String
	 */
	public void setValor(String valor) {
		this.valor = valor;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.o2solutions.core.integration.repository.entity.BaseEntity#hashCode
	 * ()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result
				+ ((tipoContato == null) ? 0 : tipoContato.hashCode());
		result = prime * result + ((valor == null) ? 0 : valor.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.o2solutions.core.integration.repository.entity.BaseEntity#equals
	 * (java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		Contato other = (Contato) obj;
		if (tipoContato != other.tipoContato)
			return false;
		if (valor == null) {
			if (other.valor != null)
				return false;
		} else if (!valor.equals(other.valor))
			return false;
		return true;
	}

}
